Skip to content

Commit

Permalink
New variant functions instead of pseudo class methods for init methods (
Browse files Browse the repository at this point in the history
#192)

* generate: make New variants based on init methods that call Autorelease. closes #186

* macos: regen with New variants. update examples, readme

* objc: expand on Retain docs
  • Loading branch information
progrium authored Aug 21, 2023
1 parent 34d4acb commit 682f17d
Show file tree
Hide file tree
Showing 448 changed files with 3,145 additions and 1,565 deletions.
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,17 @@ func main() {
app.ActivateIgnoringOtherApps(true)

url := foundation.URL_URLWithString("http://progrium.com")
req := foundation.URLRequest_InitWithURL(url)
req := foundation.NewURLRequestWithURL(url)
frame := foundation.Rect{Size: foundation.Size{1440, 900}}

config := webkit.NewWebViewConfiguration()
wv := webkit.WebView_InitWithFrameConfiguration(frame, config)
wv := webkit.NewWebViewWithFrameConfiguration(frame, config)
wv.LoadRequest(req)

w := appkit.Window_InitWithContentRectStyleMaskBackingDefer(frame,
w := appkit.NewWindowWithContentRectStyleMaskBackingDefer(frame,
appkit.ClosableWindowMask|appkit.TitledWindowMask,
appkit.BackingStoreBuffered, false)
objc.Retain(&w)
w.SetContentView(wv)
w.MakeKeyAndOrderFront(w)
w.Center()
Expand Down
25 changes: 17 additions & 8 deletions generate/codegen/gen_class.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,11 @@ func (c *Class) writeGoStruct(w *CodeWriter) {
w.WriteLine(fmt.Sprintf("//\n// [Full Topic]: %s", m.DocURL))
}
funcDeclare := im.GoFuncDeclare(c.Type.Module, c.Type.GoStructName())
w.WriteLine(fmt.Sprintf("func %s_%s {", c.Type.GName, funcDeclare))
if strings.HasPrefix(funcDeclare, "Init") {
w.WriteLine(fmt.Sprintf("func New%s%s {", c.Type.GName, strings.TrimPrefix(funcDeclare, "Init")))
} else {
w.WriteLine(fmt.Sprintf("func %s_%s {", c.Type.GName, funcDeclare))
}
w.Indent()
var params []string
for _, p := range m.Params {
Expand All @@ -240,15 +244,20 @@ func (c *Class) writeGoStruct(w *CodeWriter) {
if m.Variadic {
params = append(params, "args...")
}
alloc := ".Alloc()"
if im.ClassMethod {
alloc = ""
w.WriteLine(fmt.Sprintf("return %sClass.%s(%s)",
c.Type.GName,
m.GoFuncName(),
strings.Join(params, ", ")))
} else {
w.WriteLine(fmt.Sprintf("instance := %sClass.Alloc().%s(%s)",
c.Type.GName,
m.GoFuncName(),
strings.Join(params, ", ")))
w.WriteLine("instance.Autorelease()")
w.WriteLine("return instance")
}
w.WriteLine(fmt.Sprintf("return %sClass%s.%s(%s)",
c.Type.GName,
alloc,
m.GoFuncName(),
strings.Join(params, ", ")))

w.UnIndent()
w.WriteLine("}")
}
Expand Down
Empty file modified generate/tools/regen.sh
100644 → 100755
Empty file.
10 changes: 7 additions & 3 deletions macos/_examples/helloworld/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,32 @@ import (
"github.com/progrium/macdriver/macos/appkit"
"github.com/progrium/macdriver/macos/foundation"
"github.com/progrium/macdriver/macos/webkit"
"github.com/progrium/macdriver/objc"
)

func init() {
// ensure main is run on the startup thread
runtime.LockOSThread()
}

func main() {
// runs macOS application event loop with a callback on success
macos.RunApp(func(app appkit.Application, delegate *appkit.ApplicationDelegate) {
app.SetActivationPolicy(appkit.ApplicationActivationPolicyRegular)
app.ActivateIgnoringOtherApps(true)

url := foundation.URL_URLWithString("http://progrium.com")
req := foundation.URLRequest_InitWithURL(url)
req := foundation.NewURLRequestWithURL(url)
frame := foundation.Rect{Size: foundation.Size{1440, 900}}

config := webkit.NewWebViewConfiguration()
wv := webkit.WebView_InitWithFrameConfiguration(frame, config)
wv := webkit.NewWebViewWithFrameConfiguration(frame, config)
wv.LoadRequest(req)

w := appkit.Window_InitWithContentRectStyleMaskBackingDefer(frame,
w := appkit.NewWindowWithContentRectStyleMaskBackingDefer(frame,
appkit.ClosableWindowMask|appkit.TitledWindowMask,
appkit.BackingStoreBuffered, false)
objc.Retain(&w)
w.SetContentView(wv)
w.MakeKeyAndOrderFront(w)
w.Center()
Expand Down
10 changes: 6 additions & 4 deletions macos/_examples/largetype/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

"github.com/progrium/macdriver/macos/appkit"
"github.com/progrium/macdriver/macos/foundation"
"github.com/progrium/macdriver/objc"
)

func init() {
Expand All @@ -28,7 +29,7 @@ func main() {
fmt.Println(text)

tr, fontSize := func() (rect foundation.Rect, size float64) {
t := appkit.TextView_InitWithFrame(rectOf(0, 0, 0, 0))
t := appkit.NewTextViewWithFrame(rectOf(0, 0, 0, 0))
t.SetString(text)
for s := 70.0; s <= 550; s += 12 {
t.SetFont(appkit.Font_FontWithNameSize(*fontName, s))
Expand All @@ -44,14 +45,14 @@ func main() {

height := tr.Size.Height * 1.5
tr.Origin.Y = (height / 2) - (tr.Size.Height / 2)
t := appkit.TextView_InitWithFrame(tr)
t := appkit.NewTextViewWithFrame(tr)
t.SetString(text)
t.SetFont(appkit.Font_FontWithNameSize(*fontName, fontSize))
t.SetEditable(false)
t.SetImportsGraphics(false)
t.SetDrawsBackground(false)

c := appkit.View_InitWithFrame(rectOf(0, 0, 0, 0))
c := appkit.NewViewWithFrame(rectOf(0, 0, 0, 0))
// deprecated...
// c.SetBackgroundColor(appkit.Color_ColorWithRedGreenBlueAlpha(0, 0, 0, 0.75))
c.SetWantsLayer(true)
Expand All @@ -62,8 +63,9 @@ func main() {
tr.Origin.X = (screen.Width / 2) - (tr.Size.Width / 2)
tr.Origin.Y = (screen.Height / 2) - (tr.Size.Height / 2)

w := appkit.Window_InitWithContentRectStyleMaskBackingDefer(rectOf(0, 0, 0, 0),
w := appkit.NewWindowWithContentRectStyleMaskBackingDefer(rectOf(0, 0, 0, 0),
appkit.WindowStyleMaskBorderless, appkit.BackingStoreBuffered, false)
objc.Retain(&w)
w.SetContentView(c)
w.SetTitlebarAppearsTransparent(true)
w.SetTitleVisibility(appkit.WindowTitleHidden)
Expand Down
8 changes: 4 additions & 4 deletions macos/_examples/menu/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,18 @@ func initAndRun() {
}

func setMainMenu(app appkit.Application) {
menu := appkit.Menu_InitWithTitle("main")
menu := appkit.NewMenuWithTitle("main")
app.SetMainMenu(menu)

mainMenuItem := appkit.NewMenuItemWithSelector("", "", objc.Selector{})
mainMenuMenu := appkit.Menu_InitWithTitle("App")
mainMenuMenu := appkit.NewMenuWithTitle("App")
mainMenuMenu.AddItem(appkit.NewMenuItemWithAction("Hide", "h", func(sender objc.Object) { app.Hide(nil) }))
mainMenuMenu.AddItem(appkit.NewMenuItemWithAction("Quit", "q", func(sender objc.Object) { app.Terminate(nil) }))
mainMenuItem.SetSubmenu(mainMenuMenu)
menu.AddItem(mainMenuItem)

testMenuItem := appkit.NewMenuItemWithSelector("", "", objc.Selector{})
testMenu := appkit.Menu_InitWithTitle("Edit")
testMenu := appkit.NewMenuWithTitle("Edit")
testMenu.AddItem(appkit.NewMenuItemWithSelector("Select All", "a", objc.Sel("selectAll:")))
// missing symbol?
//testMenu.AddItem(appkit.MenuItem_SeparatorItem())
Expand All @@ -86,7 +86,7 @@ func setSystemBar(app appkit.Application) {
button := item.Button()
button.SetTitle("TestTray")

menu := appkit.Menu_InitWithTitle("main")
menu := appkit.NewMenuWithTitle("main")
menu.AddItem(appkit.NewMenuItemWithAction("Hide", "h", func(sender objc.Object) { app.Hide(nil) }))
menu.AddItem(appkit.NewMenuItemWithAction("Quit", "q", func(sender objc.Object) { app.Terminate(nil) }))
item.SetMenu(menu)
Expand Down
4 changes: 2 additions & 2 deletions macos/_examples/subclass/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,13 @@ func main() {

frame := rectOf(400, 400, 300, 200)

win := appkit.Window_InitWithContentRectStyleMaskBackingDefer(
win := appkit.NewWindowWithContentRectStyleMaskBackingDefer(
frame,
appkit.WindowStyleMaskTitled|appkit.WindowStyleMaskClosable,
appkit.BackingStoreBuffered,
false,
)
win.Retain()
objc.Retain(&win)
win.SetTitle("Hello world")
win.SetLevel(appkit.MainMenuWindowLevel + 2)

Expand Down
2 changes: 1 addition & 1 deletion macos/_examples/webshot/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func initAndRun() {
action.Set(snapshotButton, func(sender objc.Object) {
snapshotWebView.TakeSnapshotWithConfigurationCompletionHandler(nil, func(image appkit.Image, err foundation.Error) {
imageRef := image.CGImageForProposedRectContextHints(nil, nil, nil)
imageRepo := appkit.BitmapImageRep_InitWithCGImage(imageRef)
imageRepo := appkit.NewBitmapImageRepWithCGImage(imageRef)
imageRepo.SetSize(image.Size())
pngData := imageRepo.RepresentationUsingTypeProperties(appkit.BitmapImageFileTypePNG, nil)

Expand Down
4 changes: 2 additions & 2 deletions macos/_examples/webview/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ func main() {
gofsHandler := &webkit.FileSystemURLSchemeHandler{FS: _fs}
configuration.SetURLSchemeHandlerForURLScheme(gofsHandler, "gofs")

view := webkit.WebView_InitWithFrameConfiguration(foundation.Rect{}, configuration)
view := webkit.NewWebViewWithFrameConfiguration(foundation.Rect{}, configuration)
webkit.AddScriptMessageHandlerWithReply(view, "greet", func(message objc.Object) (objc.Object, error) {
param := message.Description()
fmt.Println("greet handled")
return foundation.String_InitWithString("hello: " + param).Object, nil
return foundation.NewStringWithString("hello: " + param).Object, nil
})
w.SetContentView(view)

Expand Down
24 changes: 12 additions & 12 deletions macos/_examples/widgets/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func main() {

w.SetTitle("Test widgets")

filePathField := appkit.TextField_InitWithFrame(rectOf(10, 330, 200, 20))
filePathField := appkit.NewTextFieldWithFrame(rectOf(10, 330, 200, 20))
filePathField.SetEditable(false)
w.ContentView().AddSubview(filePathField)

Expand All @@ -43,32 +43,32 @@ func main() {
})
w.ContentView().AddSubview(saveButton)

presentationTF := appkit.TextField_InitWithFrame(rectOf(10, 290, 100, 25))
presentationTF := appkit.NewTextFieldWithFrame(rectOf(10, 290, 100, 25))
w.ContentView().AddSubview(presentationTF)

stepper := appkit.Stepper_InitWithFrame(rectOf(130, 290, 16, 25))
stepper := appkit.NewStepperWithFrame(rectOf(130, 290, 16, 25))
stepper.SetDoubleValue(100)
w.ContentView().AddSubview(stepper)

colorWell := appkit.ColorWell_InitWithFrame(rectOf(160, 290, 30, 25))
colorWell := appkit.NewColorWellWithFrame(rectOf(160, 290, 30, 25))
w.ContentView().AddSubview(colorWell)

comboBox := appkit.ComboBox_InitWithFrame(rectOf(210, 290, 100, 25))
comboBox := appkit.NewComboBoxWithFrame(rectOf(210, 290, 100, 25))
comboBox.AddItemsWithObjectValues([]objc.IObject{
foundation.String_InitWithString("Test1"),
foundation.String_InitWithString("Test2"),
foundation.NewStringWithString("Test1"),
foundation.NewStringWithString("Test2"),
})
comboBox.SelectItemAtIndex(0)
w.ContentView().AddSubview(comboBox)

slider := appkit.Slider_InitWithFrame(rectOf(330, 290, 100, 25))
slider := appkit.NewSliderWithFrame(rectOf(330, 290, 100, 25))
action.Set(slider, func(sender objc.Object) {
presentationTF.SetDoubleValue(slider.DoubleValue())
})
slider.SetMaxValue(10)
w.ContentView().AddSubview(slider)

datePicker := appkit.DatePicker_InitWithFrame(rectOf(450, 290, 140, 25))
datePicker := appkit.NewDatePickerWithFrame(rectOf(450, 290, 140, 25))
w.ContentView().AddSubview(datePicker)

// buttons
Expand All @@ -80,10 +80,10 @@ func main() {
rb.SetFrame(rectOf(150, 250, 120, 25))
w.ContentView().AddSubview(rb)

sw := appkit.Switch_InitWithFrame(rectOf(260, 250, 120, 25))
sw := appkit.NewSwitchWithFrame(rectOf(260, 250, 120, 25))
w.ContentView().AddSubview(sw)

li := appkit.LevelIndicator_InitWithFrame(rectOf(370, 250, 120, 25))
li := appkit.NewLevelIndicatorWithFrame(rectOf(370, 250, 120, 25))
li.SetCriticalValue(4)
li.SetDoubleValue(3)
w.ContentView().AddSubview(li)
Expand Down Expand Up @@ -132,7 +132,7 @@ func main() {
w.ContentView().AddSubview(stf)

// progress indicator
indicator := appkit.ProgressIndicator_InitWithFrame(rectOf(10, 70, 350, 25))
indicator := appkit.NewProgressIndicatorWithFrame(rectOf(10, 70, 350, 25))
indicator.SetMinValue(0)
indicator.SetMaxValue(1)
indicator.SetIndeterminate(false)
Expand Down
6 changes: 4 additions & 2 deletions macos/appkit/accessibility_custom_action.gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,10 @@ func (a_ AccessibilityCustomAction) InitWithNameHandler(name string, handler fun
// Creates a custom action object with the specified name and handler. [Full Topic]
//
// [Full Topic]: https://developer.apple.com/documentation/appkit/nsaccessibilitycustomaction/2870120-initwithname?language=objc
func AccessibilityCustomAction_InitWithNameHandler(name string, handler func() bool) AccessibilityCustomAction {
return AccessibilityCustomActionClass.Alloc().InitWithNameHandler(name, handler)
func NewAccessibilityCustomActionWithNameHandler(name string, handler func() bool) AccessibilityCustomAction {
instance := AccessibilityCustomActionClass.Alloc().InitWithNameHandler(name, handler)
instance.Autorelease()
return instance
}

func (ac _AccessibilityCustomActionClass) Alloc() AccessibilityCustomAction {
Expand Down
12 changes: 8 additions & 4 deletions macos/appkit/accessibility_custom_rotor.gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,10 @@ func (a_ AccessibilityCustomRotor) InitWithRotorTypeItemSearchDelegate(rotorType
// Creates a custom rotor with the specified rotor type and item search delegate. [Full Topic]
//
// [Full Topic]: https://developer.apple.com/documentation/appkit/nsaccessibilitycustomrotor/2876299-initwithrotortype?language=objc
func AccessibilityCustomRotor_InitWithRotorTypeItemSearchDelegate(rotorType AccessibilityCustomRotorType, itemSearchDelegate PAccessibilityCustomRotorItemSearchDelegate) AccessibilityCustomRotor {
return AccessibilityCustomRotorClass.Alloc().InitWithRotorTypeItemSearchDelegate(rotorType, itemSearchDelegate)
func NewAccessibilityCustomRotorWithRotorTypeItemSearchDelegate(rotorType AccessibilityCustomRotorType, itemSearchDelegate PAccessibilityCustomRotorItemSearchDelegate) AccessibilityCustomRotor {
instance := AccessibilityCustomRotorClass.Alloc().InitWithRotorTypeItemSearchDelegate(rotorType, itemSearchDelegate)
instance.Autorelease()
return instance
}

func (a_ AccessibilityCustomRotor) InitWithLabelItemSearchDelegate(label string, itemSearchDelegate PAccessibilityCustomRotorItemSearchDelegate) AccessibilityCustomRotor {
Expand All @@ -65,8 +67,10 @@ func (a_ AccessibilityCustomRotor) InitWithLabelItemSearchDelegate(label string,
// Creates a custom rotor with the specified label and item search delegate. [Full Topic]
//
// [Full Topic]: https://developer.apple.com/documentation/appkit/nsaccessibilitycustomrotor/2876333-initwithlabel?language=objc
func AccessibilityCustomRotor_InitWithLabelItemSearchDelegate(label string, itemSearchDelegate PAccessibilityCustomRotorItemSearchDelegate) AccessibilityCustomRotor {
return AccessibilityCustomRotorClass.Alloc().InitWithLabelItemSearchDelegate(label, itemSearchDelegate)
func NewAccessibilityCustomRotorWithLabelItemSearchDelegate(label string, itemSearchDelegate PAccessibilityCustomRotorItemSearchDelegate) AccessibilityCustomRotor {
instance := AccessibilityCustomRotorClass.Alloc().InitWithLabelItemSearchDelegate(label, itemSearchDelegate)
instance.Autorelease()
return instance
}

func (ac _AccessibilityCustomRotorClass) Alloc() AccessibilityCustomRotor {
Expand Down
12 changes: 8 additions & 4 deletions macos/appkit/accessibility_custom_rotor_item_result.gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,10 @@ func (a_ AccessibilityCustomRotorItemResult) InitWithItemLoadingTokenCustomLabel
// Creates an item result with the specified item load token and custom label. [Full Topic]
//
// [Full Topic]: https://developer.apple.com/documentation/appkit/nsaccessibilitycustomrotoritemresult/2890782-initwithitemloadingtoken?language=objc
func AccessibilityCustomRotorItemResult_InitWithItemLoadingTokenCustomLabel(itemLoadingToken AccessibilityLoadingToken, customLabel string) AccessibilityCustomRotorItemResult {
return AccessibilityCustomRotorItemResultClass.Alloc().InitWithItemLoadingTokenCustomLabel(itemLoadingToken, customLabel)
func NewAccessibilityCustomRotorItemResultWithItemLoadingTokenCustomLabel(itemLoadingToken AccessibilityLoadingToken, customLabel string) AccessibilityCustomRotorItemResult {
instance := AccessibilityCustomRotorItemResultClass.Alloc().InitWithItemLoadingTokenCustomLabel(itemLoadingToken, customLabel)
instance.Autorelease()
return instance
}

func (a_ AccessibilityCustomRotorItemResult) InitWithTargetElement(targetElement objc.IObject) AccessibilityCustomRotorItemResult {
Expand All @@ -60,8 +62,10 @@ func (a_ AccessibilityCustomRotorItemResult) InitWithTargetElement(targetElement
// Creates an item result with the specified target element. [Full Topic]
//
// [Full Topic]: https://developer.apple.com/documentation/appkit/nsaccessibilitycustomrotoritemresult/2876308-initwithtargetelement?language=objc
func AccessibilityCustomRotorItemResult_InitWithTargetElement(targetElement objc.IObject) AccessibilityCustomRotorItemResult {
return AccessibilityCustomRotorItemResultClass.Alloc().InitWithTargetElement(targetElement)
func NewAccessibilityCustomRotorItemResultWithTargetElement(targetElement objc.IObject) AccessibilityCustomRotorItemResult {
instance := AccessibilityCustomRotorItemResultClass.Alloc().InitWithTargetElement(targetElement)
instance.Autorelease()
return instance
}

func (ac _AccessibilityCustomRotorItemResultClass) Alloc() AccessibilityCustomRotorItemResult {
Expand Down
12 changes: 8 additions & 4 deletions macos/appkit/action_cell.gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,10 @@ func (a_ ActionCell) InitImageCell(image IImage) ActionCell {
// Returns an NSCell object initialized with the specified image and set to have the cell’s default menu. [Full Topic]
//
// [Full Topic]: https://developer.apple.com/documentation/appkit/nscell/1533898-initimagecell?language=objc
func ActionCell_InitImageCell(image IImage) ActionCell {
return ActionCellClass.Alloc().InitImageCell(image)
func NewActionCellImageCell(image IImage) ActionCell {
instance := ActionCellClass.Alloc().InitImageCell(image)
instance.Autorelease()
return instance
}

func (a_ ActionCell) InitTextCell(string_ string) ActionCell {
Expand All @@ -77,6 +79,8 @@ func (a_ ActionCell) InitTextCell(string_ string) ActionCell {
// Returns an NSCell object initialized with the specified string and set to have the cell’s default menu. [Full Topic]
//
// [Full Topic]: https://developer.apple.com/documentation/appkit/nscell/1530851-inittextcell?language=objc
func ActionCell_InitTextCell(string_ string) ActionCell {
return ActionCellClass.Alloc().InitTextCell(string_)
func NewActionCellTextCell(string_ string) ActionCell {
instance := ActionCellClass.Alloc().InitTextCell(string_)
instance.Autorelease()
return instance
}
6 changes: 4 additions & 2 deletions macos/appkit/animation.gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,10 @@ func (a_ Animation) InitWithDurationAnimationCurve(duration foundation.TimeInter
// Returns an NSAnimation object initialized with the specified duration and animation-curve values. [Full Topic]
//
// [Full Topic]: https://developer.apple.com/documentation/appkit/nsanimation/1530069-initwithduration?language=objc
func Animation_InitWithDurationAnimationCurve(duration foundation.TimeInterval, animationCurve AnimationCurve) Animation {
return AnimationClass.Alloc().InitWithDurationAnimationCurve(duration, animationCurve)
func NewAnimationWithDurationAnimationCurve(duration foundation.TimeInterval, animationCurve AnimationCurve) Animation {
instance := AnimationClass.Alloc().InitWithDurationAnimationCurve(duration, animationCurve)
instance.Autorelease()
return instance
}

func (ac _AnimationClass) Alloc() Animation {
Expand Down
6 changes: 4 additions & 2 deletions macos/appkit/appearance.gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,10 @@ func (a_ Appearance) InitWithAppearanceNamedBundle(name AppearanceName, bundle f
// Creates an appearance object from the named appearance file located in the specified bundle. [Full Topic]
//
// [Full Topic]: https://developer.apple.com/documentation/appkit/nsappearance/1529131-initwithappearancenamed?language=objc
func Appearance_InitWithAppearanceNamedBundle(name AppearanceName, bundle foundation.IBundle) Appearance {
return AppearanceClass.Alloc().InitWithAppearanceNamedBundle(name, bundle)
func NewAppearanceWithAppearanceNamedBundle(name AppearanceName, bundle foundation.IBundle) Appearance {
instance := AppearanceClass.Alloc().InitWithAppearanceNamedBundle(name, bundle)
instance.Autorelease()
return instance
}

func (ac _AppearanceClass) Alloc() Appearance {
Expand Down
Loading

0 comments on commit 682f17d

Please sign in to comment.